package com.sxj.corejava.code06_数组;

/**
 * @author 石小俊
 * @date 2025年01月04日
 * 数组工具类
 */
public class ArrayUtil {

    public static void main(String[] args) {
        int[] arr = createArray(5, 1, 5);
        show(arr);
        int[] arr2 = new int[5];
        copyArray(arr, arr2);
        show(arr2);
        arr[1] = 10;
        show(arr);
        show(arr2);
        change(arr, 1, 3);
        show(arr);
        reverse(arr);
        show(arr);
    }


    /**
     * 实现复制数组的方法,将源数组的所有元素复制到目标数组中。两个参数:源数组,目标数组
     * @param src
     * @param dist
     */
    public static void copyArray(int[] src, int[] dist) {
        for (int i = 0; i < src.length; i++) {
            dist[i] = src[i];
        }
    }

    /**
     * 实现输出数组中元素的功能,要求数组的元素以短横杠-分隔
     * @param arr
     */
    public static void show(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            if (i != arr.length - 1) {
                System.out.print(arr[i] + "-");
            } else {
                System.out.print(arr[i] + "\n");
            }
        }
    }

    /**
     * 实现交换指定数组中指定位置的两个元素的值
     * @param arr
     * @param i
     * @param j
     */
    public static void change(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

    /**
     * 将指定数组的所有元素颠倒过来,倒序
     * @param arr
     */
    public static void reverse(int[] arr) {
        for (int i = 0; i < arr.length / 2; i++) {
            int j = arr.length - 1 - i;
            change(arr, i, j);
        }
    }

    /**
     * 随机生成一个int类型的数组,通过方法的参数控制数组的长度、以及取值范围
     * 其值为指定范围x-y之间的整数,且不能重复
     * @param length
     * @param x
     * @param y
     * @return
     */
    public static int[] createArray(int length, int x, int y) {
        int[] arr = new int[length];
        for (int i = 0; i < arr.length; i++) {
            // 随机生成一个x-y的整数
            arr[i] = (int) (Math.random() * (y - x + 1) + x);
            // 此时随机生成的整数是可能存在重复的
            // 因此,需要判断是否已经生成过该整数
            // 如果已经存在了,则重新生成
            for (int j = 0; j < i; j++) {
                if (arr[j] == arr[i]) {
                    // 如果已经生成好的数组元素中存在与当前生成的值相等
                    // 说明已经存在了,因此需要重新生成下标为i的元素的值
                    i--;
                    // 结束内层循环
                    break;
                }
            }
        }
        return arr;
    }

}
